跳到主要内容

JavaScript 加载策略

一些 JavaScript 必须在等到文档加载完毕后(或其他时机)才能被正确执行,因此需要加载策略确保执行的时机。

普通标签

读取到标签时停止解析其余文档,下载并执行完之后再继续解析。

async 属性

读取到标签时开始下载(但可以继续解析),下载完毕之后立即执行。由于取决于下载速度,它们之间的顺序以及和解析的顺序是不确定的,只适用于一些独立的任务。

defer 属性

引用外部 JavaScript 时,可以使用。读取到标签时开始下载,但解析完文档后才执行。执行时按照它们在文档中的顺序。

<script src="script.js" defer></script>

以上三种策略的汇总:

事件监听

可以在监听到某些事件发生之后再加载 JavaScript:

document.addEventListener('DOMContentLoaded', () => {
// …
});

文档顺序

一种过时的做法是将 JavaScript 放在文档末尾,这样可以保证在文档加载完成之后再执行。但是这会导致无法提前下载和解析。